package com.zhangxin.aiInterview.manager.xfapi.http;

import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 讯飞公共接口服务(根据简历成笔试问题-微信)
 */
@Component
public class WxGenerateExamQuestionApi {
    // 静态变量缓存 Prompt（仅初始化一次）
    private static final String SYSTEM_PROMPT;

    static {
        // 初始化 System Prompt
        SYSTEM_PROMPT = "你是一位笔试出题专家，根据用户提供面试公司、面试岗位，生成该公司这个岗位的笔试题，\\n\" +\n" +
                "        生成笔试题的要求为：\"生成10个选择题，5个问答题\" +\n" +
                "                       \"##要求：生成题目：选择题、问答题题目，返回的数据为json格式，按照如下要求返回数据 type等于1是选择题，type等于2是问答题。\" +\n" +
                "                     \"[ { \"type\": 1, \"question\": [ { \"title\": \"题目标题\", \"option\": [ {\"value\": \"选项内容\", \"key\": \"A\"}, {\"value\": \"选项内容\", \"key\": \"B\"}], \"answer\": \"正确选项\"} ] }, { \"type\": 2, \"question\": [{\"title\":\"问答题1\", answer:\"问答题1答案\"},{\"title\":\"问答题2\", answer:\"问答题2答案\"}] } ] \" + \n" +
                "                       \"##注意：" + "\n" +
                "                      1. 严格按照我提供的格式返回数据" + "\n" +
                "                      2. 问答题部分除了包含技术问答题还需要有系统设计题" + "\n" +
                "                      3. 选择题必须有A,B,C,D四个选项" + "\n" +
                "                      4. 生成的所有题目(选择题，问答题)都必须要和用户面试的岗位有关系";
    }

    @Value("${xunfei.apiPassword}")
    private String apiPassword;

    /**
     * 生成笔试题
     * @param position
     * @param company
     * @return
     */
    public String generateExamQuestion(String position, String company) {
        // 1. 请求地址和Headers
        String url = "https://spark-api-open.xf-yun.com/v1/chat/completions";

        // 2. 构造请求体（JSON）
        JSONObject requestBody = new JSONObject();
        requestBody.set("model", "generalv3.5");

        //构造用户prompt
        JSONArray messages = new JSONArray();
        messages.add(new JSONObject().set("role", "system").set("content", SYSTEM_PROMPT));
        messages.add(new JSONObject().set("role", "user").set("content", "笔试公司：" + company + "  笔试岗位：" + position));

        requestBody.set("messages", messages);
        requestBody.set("top_p", 0.8);

        // 3. 发送请求
        String jsonStr = HttpRequest.post(url)
                .header("Content-Type", "application/json")
                .header("Authorization", "Bearer " + apiPassword)
                .body(requestBody.toString())
                .execute()
                .body();
        JSONObject rootObj = JSONUtil.parseObj(jsonStr);
        return (String) rootObj.getByPath("choices[0].message.content");
    }
}
